﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using LinqKit;
using FrameworkLib.Facades;
using GestionePolveri2.DAL;
using GestionePolveriLib.BL.FilterBags;
using GestionePolveriLib.BL.Reports;

namespace GestionePolveriLib.Facades.Reports
{
    public class ReportTracciabilitaFacade : FacadeBase<GestionePolveriEntities>
    {
        ReportTracciabilitaFilterBag m_filter = null;

        public ReportTracciabilitaFacade()
        {

        }

        public ReportTracciabilitaFacade(ReportTracciabilitaFilterBag filter)
        {
            m_filter = filter;
        }

        public List<ReportTracciabilita> GetReportData()
        {
            List<ReportTracciabilita> retValue = null;

            GestionePolveriEntities context = this.GetContext();

            string ff = ((GestionePolveriLib.BL.FilterBags.ReportTracciabilitaFilterBag)m_filter).Famiglia;

            var obj = from x in context.Movimenti.AsExpandable().Where(m_filter.SetUpFilter())
                      join fcxp in context.vw_FamiglieColoriXPolveri on x.IDPolvere equals fcxp.idpolvere
                      where (((ff == null) || (fcxp.Famiglia == ff))) && !x.IsDeleted
                      orderby x.Lotti.CodLotto, x.DataMovimento
                      select new ReportTracciabilita
                      {
                          DataMovimento = x.DataMovimento,
                          Impianto = x.Impianti.Impianto,
                          Operatore = x.aspnet_Users.UserName,
                          Quantita = x.Quantita,
                          Tipo = x.CausaliMagazzino.CodCausale,
                          CodicePolvere = x.AnagPolveri.CodicePolvere,
                          CodiceLotto = x.Lotti.CodLotto,
                          Fornitore = x.AnagPolveri.AnagFornitori.Descrizione
                      };

            if (obj.Any())
            {
                retValue = obj.ToList();

                List<LookUp_FamiglieColori_ColoriAbbinati_Result> mmm = (List<LookUp_FamiglieColori_ColoriAbbinati_Result>)FrameworkLib.Utilities.Singleton<GestionePolveriLib.Cache.LookUpData>.Instance.GetData("LookupFamiglie");
                foreach (ReportTracciabilita p in retValue)
                {
                    LookUp_FamiglieColori_ColoriAbbinati_Result r = mmm.Find(x => x.CodicePolvere == p.CodicePolvere);

                    p.Famiglia = r.Famiglia;
                }
            }

            return retValue;
        }
    }
}
